<?php

class SqlExcluirPadrao
{
    public function Executa()
    {
        $retorno = array();
        $trataDados = new TrataDados();
        if ( $trataDados->pegaDados() )
        {
            $tabelaModulo = $trataDados->getModuloTabela();
            $tabela = $trataDados->getTabela();
            
            $modulo = explode(".", $tabelaModulo);
            $tabelaEmPartes = explode("_", $tabela);
            $nomeClasse = str_replace(' ', '', ucwords($modulo[0] . ' ' . implode(" ", $tabelaEmPartes))) . 'Executa';
            
            try
            {
                $pdo = Conexao::open('sistema'); // inicia conexao
                $dados = $trataDados->getDados();
                
                if ( class_exists($nomeClasse) )
                {
                    $dados["id_{$tabela}"] = $trataDados->getIdTabela();
                    
                    $classe = new $nomeClasse($pdo);
                    $classe->excluir($dados);
                    $retorno['resultado'] = 'sim';
                    $retorno['retorno'] = 'excluir';
                }
                else
                {
                    throw new Exception("Class {$nomeClasse} nao encontrada");
                }
                
                $pdo = null; // fecha conexao
            

            }
            catch ( PDOException $e )
            {
                new Excecao($e);
                $retorno['resultado'] = 'erro';
                $retorno['erro'] = 'excluir';
            }
            catch ( Exception $e )
            {
                new Excecao($e);
                $retorno['resultado'] = 'erro';
                $retorno['erro'] = 'class_nao_definida';
            }
        
        }
        else
        {
            $retorno['resultado'] = 'dados_errados';
            $retorno['dados_errados'] = $trataDados->getErro();
        }
        return json_encode($retorno);
    }
    
    private function Executa1()
    {
        $retorno = array();
        $trataDados = new TrataDados();
        if ( $trataDados->pegaDados() )
        {
            $tabelaModulo = $trataDados->getModuloTabela();
            $tabela = $trataDados->getTabela();
            
            $sql = new SqlExcluir();
            $sql->setTabela($tabelaModulo); // define o nome da tabela
            // cria critério de seleção de dados
            $criterio = new SqlCriterio();
            $criterio->add(new SqlFiltro("id_{$tabela}", '=', $trataDados->getIdTabela()));
            // define o critério de seleção de dados
            $sql->setCriterio($criterio);
            
            try
            {
                $pdo = Conexao::open('sistema'); // inicia conexao
                

                $pdo->exec($sql->getInstrucao()); // retorna a instrução SQL e a executa
                $sessao = new Sessao();
                // atribui valores para inserir historico
                $historico = new Historico();
                $historico->setIdUsuario($sessao->getValor("sessao_id_usuario"));
                $historico->setAcao("Excluir");
                $historico->setIdRegistro($trataDados->getIdTabela());
                $historico->setNomeTabela($tabelaModulo);
                $historico->setSql($sql->getInstrucao());
                $historico->cadastraHistorico(); // inseri historico
                

                $pdo = null; // fecha conexao
                

                $retorno['resultado'] = 'sim';
            }
            catch ( PDOException $e )
            {
                new Excecao($e);
                $retorno['resultado'] = 'erro';
                $retorno['erro'] = 'excluir';
            }
        
        }
        else
        {
            $retorno['resultado'] = 'dados_errados';
            $retorno['dados_errados'] = $trataDados->getErro();
        }
        return json_encode($retorno);
    }

}
?>